package ar.uba.fi.algo3.tp3.modelo;

import ar.uba.fi.algo3.tp3.controlador.ControladorPacman;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Persistidor {

    public static void guardarJuego() {
        if (!Partida.getInstance().isPerdida()) {
            guardarMapa();
            guardarPartida();
        }
    }

    private static void guardarMapa() {
        Partida p = Partida.getInstance();
        try {
            FileOutputStream fos = new FileOutputStream("mapa.dat");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(p.getMapa());
            oos.close();
        } catch (IOException e) {
            ControladorPacman.getInstance().informarDeError("No se pudo guardar el mapa!");
        }
    }

    private static void guardarPartida() {
        Partida p = Partida.getInstance();
        try {
            FileOutputStream fos = new FileOutputStream("partida.dat");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(p.getInfoPartida());
            oos.close();
        } catch (IOException e) {
            ControladorPacman.getInstance().informarDeError("No se pudo guardar la informacion de la partida!");
        }
    }

    private static void cargarMapa() {
        try {
            FileInputStream fis = new FileInputStream("mapa.dat");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Mapa mapa = (Mapa) ois.readObject();
            Partida.getInstance().setMapa(mapa);
        } catch (Exception e) {
            ControladorPacman.getInstance().informarDeError("No se pudo cargar la informacion del mapa!");
        }
    }

    private static void cargarPartida() {
        try {
            FileInputStream fis = new FileInputStream("partida.dat");
            ObjectInputStream ois = new ObjectInputStream(fis);
            InfoPartida ip = (InfoPartida) ois.readObject();
            Partida.getInstance().setInfoPartida(ip);
        } catch (Exception e) {
            ControladorPacman.getInstance().informarDeError("No se pudo cargar la informacion de la partida!");
        }
    }

    public static void cargarJuego() {
        cargarMapa();
        cargarPartida();
    }
}
